// 为什么不能用先找到最远路径
// 因为有负权边的存在

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 20010;
int n;
int e[N], ne[N], w[N], h[N], idx;
int ans;
void add(int a, int b, int c)  // 添加一条边a->b，边权为c
{
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

// 所有情况按照点去分的话大致可以分为两种情况:
// 1. 一条道走到黑
// 2. 中途经过这个点

int dfs(int u, int father)
{
    int d1 = 0, d2 = 0;
    for (int i = h[u]; ~i; i = ne[i])
    {
        int j = e[i];
        if (e[i] == father) continue;
        int dd = dfs(j, u) + w[i];
        if (dd >= d1) d2 = d1, d1 = dd;
        else if (dd > d2) d2 = dd;
    }
    ans = max(ans, d1 + d2);
    return max(d1, d2);
}

int main()
{
    cin >> n;
    memset(h, -1, sizeof h);
    for (int i = 1; i < n; ++i)
    {
        int a, b, c;
        cin >> a >> b >> c;
        add(a, b, c); add(b, a, c);
    }
    // 这个最长路径需不需要经过根呢? 
    dfs(1, -1);
    cout << ans << endl;
    return 0;
}